﻿<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>8.1.Http头Cache-Control详解</title>
    <script type="text/javascript" src="../Content/highlighter/scripts/shCore.js"></script>
    <script type="text/javascript" src="../Content/highlighter/scripts/shBrushJScript.js"></script>
    <script type="text/javascript" src="../Content/highlighter/scripts/shBrushCSharp.js"></script>
    <script type="text/javascript" src="../Content/highlighter/scripts/shBrushXml.js"></script>
    <link type="text/css" rel="stylesheet" href="../Content/highlighter/styles/shCoreDefault.css" />
    <script type="text/javascript">SyntaxHighlighter.all();</script>
</head>
<body>
    <h3>Http客户端缓存</h3>
    <p>
        <b>http协议，Cache-Control(缓存控制)说明</b><br/><br/>
		1.不需要缓存的页面（即一般的动态页面）的Http报头中包含以下字段：<br/>
		Cache-Control:private<br/>
		Date:Tue,03 Jan 2012 10:48:28 GMT<br/><br/>
		其中private代表此页面在浏览器端不缓存。<br/>
		Date表示远程文件的更新时间<br/>
		<hr/>
		2.缓存的页面报头中包含以下字段：<br/>
		Cache-Control:public,max-age=10<br/>
		Date:Wed,04 Jan 2012 14:02:07 GMT<br/>
		Expires:Wed,04 Jan 2012 14:02:17 GMT<br/>
		Last-Modified:Wed,04 Jan 2012 14:02:07 GMT<br/><br/>
		其中public代表此页面在浏览器端需缓存<br/>
		max-age表示该页面要缓存多少秒。<br/>
		Expires表示该页面在浏览器端的缓存在什么时间会失效。<br/>
		其中Date（更新时间）+max-age（缓存时间）=Expires（过期时间）<br/>
		Last-Modified表示该页面的最后修改时间。<br/>
		在缓存未失效时，浏览器不会向服务器发送任何新的请求。<br/>
		但如果用户使用f5进行强制刷新时，浏览器还是会发送请求。<br/>
		<hr/>
		3.为了防止用户恶意刷新所实现的304应答过程。<br/><br/>
		当用户第一次发送请求时，服务器返回Last-Modified头。<br/>
		当用户再次浏览该页面或强制刷新时，请求的http头中就会出现If-Modified-Since头。<br/>
		此头对应的值是Last-Modified的值。<br/>
		服务端会获取该文件的最后修改时间与包头中If-Modified-Since中提取的时间，<br/>
		If-Modified-Since的时间比文件的最后修改时间要小，则服务器返回304错误。<br/>
		304表示文件未修改。这时浏览器会继续取用缓存。即实现了304应答。<br/>
		当然服务器也可以选择直接返回页面，即第二种情况。<br/>
    </p>
</body>
</html>
